home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-05-31 | 79.7 KB | 2,595 lines |
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/docs/samba.faq samba-1.9.16alpha4/docs/samba.faq
- --- samba-1.9.16alpha3/docs/samba.faq Wed May 29 17:54:12 1996
- +++ samba-1.9.16alpha4/docs/samba.faq Sat Jun 1 01:13:35 1996
- @@ -511,6 +511,74 @@
- Each time you start your computer (or login for Win95) your PC will
- synchronize it's clock with your Samba server.
-
- +
- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- +* 4: Problems with WinDD, NTrigue, WinCenterPro etc
- +
- +All of the above programs are applications that sit on an NT box and
- +allow multiple users to access the NT GUI applications from remote
- +workstations (often over X).
- +
- +What has this got to do with Samba? The problem comes when these users
- +use filemanager to mount shares from a Samba server. The most common
- +symptom is that the first user to connect get correct file permissions
- +and has a nice day, but subsequent connections get logged in as the
- +same user as the first person to login. They find that they cannot
- +access files in their own home directory, but that they can access
- +files in the first users home directory (maybe not such a nice day
- +after all?)
- +
- +Why does this happen? The above products all share a common heritage
- +(and code base I believe). They all open just a single TCP based SMB
- +connection to the Samba server, and requests from all users are piped
- +over this connection. This is unfortunate, but not fatal.
- +
- +It means that if you run your Samba server in share level security
- +(the default) then things will definately break as described above. The
- +share level SMB security model has no provision for multiple user IDs
- +on the one SMB connection. See security_level.txt in the docs for more
- +info on share/user/server level security.
- +
- +If you run in user or server level security then you have a chance,
- +but only if you have a recent version of Samba (at least 1.9.15p6). In
- +older versions bugs in Samba meant you still would have had problems.
- +
- +If you have a trapdoor uid system in your OS then it will never work
- +properly. Samba needs to be able to switch uids on the connection and
- +it can't if your OS has a trapdoor uid system. You'll know this
- +because Samba will note it in your logs.
- +
- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- +* 5: Problem with printers under NT
- +
- +This info from Stefan Hergeth may be useful:
- +
- + A network-printer (with ethernetcard) is connected to the NT-Clients via
- + our UNIX-Fileserver (SAMBA-Server), like the configuration told by
- + Matthew Harrell <harrell@leech.nrl.navy.mil> (see WinNT.txt)
- +
- + 1.) If a user has choosen this printer as the default printer in his
- + NT-Session and this printer is not connected to the network
- + (e.g. switched off) than this user has a problem with the SAMBA-
- + connection of his filesystems. It's very slow.
- +
- + 2.) If the printer is connected to the network everything works fine.
- +
- + 3.) When the smbd ist started with debug level 3, you can see that the
- + NT spooling system try to connect to the printer many times. If the
- + printer ist not connected to the network this request fails and the
- + NT spooler is wasting a lot of time to connect to the printer service.
- + This seems to be the reason for the slow network connection.
- +
- + 4.) Maybe it's possible to change this behaviour by setting different printer
- + properties in the Print-Manager-Menu of NT, but i didn't try it
- + yet.
- +
- + I hope this information will help in some way.
- +
- + Stefan Hergeth <hergeth@f7axp1.informatik.fh-muenchen.de>
- +
- +
- ===============================================================================
- SECTION FIVE: Specific client application problems
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/docs/security_level.txt samba-1.9.16alpha4/docs/security_level.txt
- --- samba-1.9.16alpha3/docs/security_level.txt Thu Jan 1 10:00:00 1970
- +++ samba-1.9.16alpha4/docs/security_level.txt Thu May 30 10:05:51 1996
- @@ -0,0 +1,78 @@
- +Description of SMB security levels.
- +----------------------------------
- +
- +
- +A SMB server tells the client at startup what "security level" it is
- +running. There are two options "share level" and "user level". Which
- +of these two the client receives affects the way the client then tries
- +to authenticate itself. It does not directly affect (to any great
- +extent) the way the Samba server does security. I know this is
- +strange, but it fits in with the client/server approach of SMB. In SMB
- +everything is initiated and controlled by the client, and the server
- +can only tell the client what is available and whether an action is
- +allowed.
- +
- +I'll describe user level security first, as its simpler. In user level
- +security the client will send a "session setup" command directly after
- +the protocol negotiation. This contains a username and password. The
- +server can either accept or reject that username/password
- +combination. Note that at this stage the server has no idea what
- +share the client will eventually try to connect to, so it can't base
- +the "accept/reject" on anything other than:
- +
- +- the username/password
- +- the machine that the client is coming from
- +
- +If the server accepts the username/password then the client expects to
- +be able to mount any share (using a "tree connection") without
- +specifying a password. It expects that all access rights will be as
- +the username/password specified in the "session setup".
- +
- +It is also possible for a client to send multiple "session setup"
- +requests. When the server responds it gives the client a "uid" to use
- +as an authentication tag for that username/password. The client can
- +maintain multiple authentication contexts in this way (WinDD is an
- +example of an application that does this)
- +
- +
- +Ok, now for share level security. In share level security (the default
- +with samba) the client authenticates itself separately for each
- +share. It will send a password along with each "tree connection"
- +(share mount). It does not explicitly send a username with this
- +operation. The client is expecting a password to be associated with
- +each share, independent of the user. This means that samba has to work
- +out what username the client probably wants to use. It is never
- +explicitly sent the username. A "real" SMB server like NT actually
- +associates passwords directly with shares in share level security, but
- +samba always uses the unix authentication scheme where it is a
- +username/password that is authenticated, not a "share/password".
- +
- +Many clients send a "session setup" even if the server is in share
- +level security. They normally send a valid username but no
- +password. Samba records this username is a list of "possible
- +usernames". When the client then does a "tree connection" it also adds
- +to this list the name of the share they try to connect to (useful for
- +home directories) and any users listed in the "user =" smb.conf
- +line. The password is then checked in turn against these "possible
- +usernames". If a match is found then the client is authenticated as
- +that user.
- +
- +Finally "server level" security. In server level security the samba
- +server reports to the client that it is in user level security. The
- +client then does a "session setup" as described earlier. The samba
- +server takes the username/password that the client sends and attempts
- +to login to the "password server" by sending exactly the same
- +username/password that it got from the client. If that server is in
- +user level security and accepts the password then samba accepts the
- +clients connection. This allows the samba server to use another SMB
- +server as the "password server".
- +
- +You should also note that at the very start of all this, where the
- +server tells the client what security level it is in, it also tells
- +the client if it supports encryption. If it does then it supplies the
- +client with a random "cryptkey". The client will then send all
- +passwords in encrypted form. You have to compile samba with encryption
- +enabled to support this feature, and you have to maintain a separate
- +smbpasswd file with SMB style encrypted passwords. It is
- +cryptographically impossible to translate from unix style encryption
- +to SMB style encryption.
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/docs/smb.conf.5 samba-1.9.16alpha4/docs/smb.conf.5
- --- samba-1.9.16alpha3/docs/smb.conf.5 Sat May 4 17:50:23 1996
- +++ samba-1.9.16alpha4/docs/smb.conf.5 Sat Jun 1 01:13:35 1996
- @@ -459,6 +459,8 @@
-
- default case
-
- +delete readonly
- +
- deny hosts
-
- directory
- @@ -831,6 +833,19 @@
- path = /%S
-
-
- +.SS delete readonly (S)
- +This parameter allows readonly files to be deleted. This is not normal DOS
- +semantics, but is allowed by Unix.
- +
- +This option may be useful for running applications such as rcs, where unix
- +file ownership prevents changing file permissions, and dos semantics prevent
- +deletion of a read only file.
- +
- +.B Default:
- + delete readonly = No
- +
- +.B Example:
- + delete readonly = Yes
- .SS deny hosts (S)
- A synonym for this parameter is 'hosts deny'.
-
- @@ -1187,9 +1202,9 @@
- This command should be a program or script which takes a printer name
- as its only parameter and outputs printer status information.
-
- -Currently four styles of printer status information are supported;
- -BSD, SYSV, AIX and HPUX. This covers most unix systems. You control
- -which type is expected using the "printing =" option.
- +Currently six styles of printer status information are supported; BSD,
- +SYSV, AIX, HPUX, QNX and PLP. This covers most unix systems. You
- +control which type is expected using the "printing =" option.
-
- Some clients (notably Windows for Workgroups) may not correctly send the
- connection number for the printer they are requesting status information
- @@ -1235,8 +1250,8 @@
- This command should be a program or script which takes a printer name
- and job number, and deletes the print job.
-
- -Currently four styles of printer control are supported; BSD, SYSV, AIX
- -and HPUX. This covers most unix systems. You control which type is
- +Currently six styles of printer control are supported; BSD, SYSV, AIX
- +HPUX, QNX and PLP. This covers most unix systems. You control which type is
- expected using the "printing =" option.
-
- If a %p is given then the printername is put in it's place. A %j is
- @@ -1881,8 +1896,9 @@
- on your system, and also affects the default values for the "print
- command", "lpq command" and "lprm command".
-
- -Currently three printing styles are supported. They are "printing =
- -bsd", "printing = sysv", "printing = hpux" and "printing = aix".
- +Currently six printing styles are supported. They are "printing =
- +bsd", "printing = sysv", "printing = hpux", "printing = aix",
- +"printing = qnx" and "printing = plp".
-
- To see what the defaults are for the other print commands when using
- these three options use the "testparm" program.
- @@ -1946,6 +1962,14 @@
-
- .B Example:
- protocol = LANMAN1
- +.SS proxy name resolution (G)
- +
- +This is a boolean that controls if nmbd will respond to broadcast name
- +queries on behalf of other hosts. You may need to set this to no for
- +some older clients.
- +
- +.B Default:
- + proxy name resolution = yes
- .SS public (S)
- A synonym for this parameter is 'guest ok'.
-
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/docs/smbclient.1 samba-1.9.16alpha4/docs/smbclient.1
- --- samba-1.9.16alpha3/docs/smbclient.1 Mon May 6 10:35:43 1996
- +++ samba-1.9.16alpha4/docs/smbclient.1 Sat Jun 1 01:13:36 1996
- @@ -44,8 +44,13 @@
- ] [
- .B -p
- .I port number
- +] [
- +.B -c
- +.I command string
- +] [
- .B -T
- .I tar options
- +] [
- .B -D
- .I initial directory
- ]
- @@ -437,6 +442,19 @@
- Change to initial directory before starting. Probably only of any use
- with the tar (\-T) option.
-
- +
- +.RE
- +
- +.B -c
- +.I command string
- +
- +.RS 3
- +
- +command string is a semicolon separated list of commands to be
- +executed instead of prompting from stdin. -N is implied by -c.
- +
- +This is particularly useful in scripts and for printing stdin to
- +the server, e.g. -c 'print -'.
-
- .RE
-
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/examples/thoralf/smb.conf samba-1.9.16alpha4/examples/thoralf/smb.conf
- --- samba-1.9.16alpha3/examples/thoralf/smb.conf Thu Jan 1 10:00:00 1970
- +++ samba-1.9.16alpha4/examples/thoralf/smb.conf Thu May 30 13:15:11 1996
- @@ -0,0 +1,152 @@
- +; Configuration file for smbd (Samba 1.9.15p8)
- +; created by Thoralf Freitag. Send comments to:
- +; <Thoralf.Freitag@remserv.rz.fhtw-berlin.de> or
- +; <Thoralf.Freitag@t-online.de>
- +; last edit 24.04.1995 01:11
- +;
- +;
- +
- +[global]
- +
- + protocol = NT1
- + ;long filenames for win95
- + mangle case = yes
- + ;lower and upper letters
- + mangled names = yes
- + default case = lower
- + case sensitive = no
- + preserve case = yes
- + short preserve case = yes
- +
- + printing = bsd
- + printcap name = /etc/printcap
- + lpq cache time = 0
- + workgroup = WORKGROUP
- + admin users = su
- + ;su is allowed to do all !!!
- + guest account = ftp
- + ;guest is same as user ftp
- + default service = reference
- + ;is possibly helpful to browsing under win 95
- + os level = 2
- + log file = /var/adm/log.smb
- + max log size = 10
- + debug level = 1
- + share modes = yes
- + lock directory = /var/adm
- +
- +[JP_360_raw]
- + comment = Networkprinter queue for Olivetti JP 360 (untreated RAW format)
- + browseable = yes
- + available = yes
- + public = no
- + force user = root
- + writable = no
- + printable = yes
- + printer name = samba
- + ;samba is an alias name for an raw_printer in your /etc/printcap
- + path = /samba/tmp
- + create mode = 0700
- +
- +[JP_360_mono]
- + comment = Networkprinter queue for Olivetti JP 360 Mono (with apsfilter)
- + browseable = yes
- + available = yes
- + public = no
- + force user = root
- + writable = no
- + printable = yes
- + printer name = lp
- + ;lp means the standard printer in your /etc/printcap
- + path = /samba/tmp
- + create mode = 0700
- +
- +[JP_360_color]
- + comment = Networkprinter queue for Olivetti JP 360 Color (with apsfilter)
- + browseable = yes
- + available = yes
- + public = no
- + force user = root
- + writable = no
- + printable = yes
- + printer name = lp4
- + ;my printer need this to print with his color cartridge
- + ;--> the lpd is drive to the printer as an color printer
- + path = /samba/tmp
- + create mode = 0700
- +
- +[tmp]
- + comment = the garbage dump
- + browseable = yes
- + available = yes
- + public = yes
- + read only = no
- + printable = no
- + path = /samba/tmp
- + create mask = 0777
- +
- +[transfer]
- + comment = the market place
- + browseable = yes
- + available = yes
- + public = yes
- + read only = no
- + printable = no
- + path = /samba/transfer
- + create mask = 0777
- +
- +[homes]
- + comment = home directories
- + browseable = no
- + ;ONLY the home-dirs are visible, not the service itself
- + available = yes
- + guest ok = no
- + read only = no
- + printable = no
- + create mode = 0700
- +
- +[install]
- + comment = all of the many install files
- + browsable = yes
- + available = yes
- + public = no
- + username = @root, @users
- + writable = yes
- + read list = @users
- + printable = no
- + path = /samba/install
- + create mode = 0755
- +
- +[doc-help]
- + comment = documentations, helpfiles, FAQ's
- + browsable = yes
- + available = yes
- + public = no
- + username = @root, @users
- + writable = yes
- + read list = @users
- + printable = no
- + path = /samba/doc
- + create mode = 0755
- +
- +[cd_rom_2]
- + comment = the CD in the CD-ROM drive on PANDORA
- + browsable = yes
- + available = yes
- + public = yes
- + writable = no
- + printable = no
- + path = /cdrom
- +
- +[reference]
- + ;the default, if invalid accesses
- + comment = PANDORA: Samba LAN manager
- + browsable = yes
- + ;only as an hint
- + available = no
- + ;however no access possible
- + public = yes
- + writable = no
- + printable = no
- + path = /samba/tmp
- +
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/.cvsignore samba-1.9.16alpha4/source/.cvsignore
- --- samba-1.9.16alpha3/source/.cvsignore Sun May 5 21:08:57 1996
- +++ samba-1.9.16alpha4/source/.cvsignore Sat Jun 1 01:15:11 1996
- @@ -1,4 +1,4 @@
- -Makefile.ajt
- +makefile
- nmbd
- nmblookup
- smbclient
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/Makefile samba-1.9.16alpha4/source/Makefile
- --- samba-1.9.16alpha3/source/Makefile Mon May 6 10:35:45 1996
- +++ samba-1.9.16alpha4/source/Makefile Sat Jun 1 01:15:11 1996
- @@ -500,7 +500,7 @@
- INCLUDES = $(INCLUDES1) $(INCLUDES2)
-
- UTILOBJ1 = util.o system.o charset.o kanji.o fault.o smbencrypt.o charcnv.o
- -UTILOBJ = $(UTILOBJ1) md4.o loadparm.o params.o pcap.o username.o
- +UTILOBJ = $(UTILOBJ1) md4.o loadparm.o params.o pcap.o username.o time.o
- PARAMOBJ = $(UTILOBJ) ufc.o smbpass.o access.o
- SMBDOBJ1 = $(PARAMOBJ) trans2.o message.o dir.o printing.o locking.o
- SMBDOBJ2 = ipc.o reply.o mangle.o chgpasswd.o password.o quotas.o
- @@ -527,7 +527,7 @@
-
- nmbd: nameserv.o nmblib.o nmbsync.o $(UTILOBJ)
- @echo Linking nmbd
- - @$(CC) $(CFLAGS) -o nmbd nameserv.o nmblib.o nmbsync.o $(PARAMOBJ) $(LIBS)
- + @$(CC) $(CFLAGS) -o nmbd nameserv.o nmblib.o nmbsync.o $(UTILOBJ) $(LIBS)
-
- smbclient: client.o clitar.o getsmbpass.o nmblib.o $(UTILOBJ)
- @echo Linking smbclient
- @@ -555,7 +555,7 @@
- @$(SHELL) $(srcdir)installbin.sh $(INSTALLPERMS) $(BASEDIR) $(BINDIR) $(LIBDIR) $(VARDIR) $(PROGS)
-
- installscripts:
- - @$(SHELL) $(srcdir)installbin.sh $(INSTALLPERMS) $(BASEDIR) $(BINDIR) $(LIBDIR) $(VARDIR) $(SCRIPTS)
- + @$(SHELL) $(srcdir)installscripts.sh $(INSTALLPERMS) $(BINDIR) $(srcdir)
-
- # revert to the previously installed version
- revert:
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/client.c samba-1.9.16alpha4/source/client.c
- --- samba-1.9.16alpha3/source/client.c Mon May 6 10:35:45 1996
- +++ samba-1.9.16alpha4/source/client.c Sat Jun 1 01:15:11 1996
- @@ -38,6 +38,7 @@
- pstring password = "";
- pstring username="";
- pstring workgroup=WORKGROUP;
- +char *cmdstr="";
- BOOL got_pass = False;
- BOOL connect_as_printer = False;
- BOOL connect_as_ipc = False;
- @@ -482,7 +483,7 @@
- CNV_LANG(finfo->name),
- attrib_string(finfo->mode),
- finfo->size,
- - asctime(LocalTime(&t,GMT_TO_LOCAL))));
- + asctime(LocalTime(&t))));
- }
-
- /****************************************************************************
- @@ -2669,7 +2670,7 @@
- {
- newer_than = sbuf.st_mtime;
- DEBUG(1,("Getting files newer than %s",
- - asctime(LocalTime(&newer_than,GMT_TO_LOCAL))));
- + asctime(LocalTime(&newer_than))));
- }
- else
- newer_than = 0;
- @@ -3031,7 +3032,7 @@
- static BOOL done_time = False;
- if (!done_time) {
- DEBUG(1,("Server time is %sTimezone is UTC%+02.1f\n",
- - asctime(LocalTime(&servertime,GMT_TO_LOCAL)),
- + asctime(LocalTime(&servertime)),
- -(double)(serverzone/3600.0)));
- done_time = True;
- }
- @@ -4002,6 +4003,7 @@
- {
- extern FILE *dbf;
- pstring line;
- + char *cmd;
-
- char *InBuffer = (char *)malloc(BUFFER_SIZE + SAFETY_MARGIN);
- char *OutBuffer = (char *)malloc(BUFFER_SIZE + SAFETY_MARGIN);
- @@ -4016,7 +4018,44 @@
-
- if (*base_directory) do_cd(base_directory);
-
- - while (!feof(stdin))
- + cmd = cmdstr;
- + if (cmd[0] != '\0') while (cmd[0] != '\0')
- + {
- + char *p;
- + fstring tok;
- + int i;
- +
- + if ((p = strchr(cmd, ';')) == 0)
- + {
- + strncpy(line, cmd, 999);
- + line[1000] = '\0';
- + cmd += strlen(cmd);
- + }
- + else
- + {
- + if (p - cmd > 999) p = cmd + 999;
- + strncpy(line, cmd, p - cmd);
- + line[p - cmd] = '\0';
- + cmd = p + 1;
- + }
- +
- + /* input language code to internal one */
- + CNV_INPUT (line);
- +
- + /* and get the first part of the command */
- + {
- + char *ptr = line;
- + if (!next_token(&ptr,tok,NULL)) continue;
- + }
- +
- + if ((i = process_tok(tok)) >= 0)
- + commands[i].fn(InBuffer,OutBuffer);
- + else if (i == -2)
- + DEBUG(0,("%s: command abbreviation ambiguous\n",CNV_LANG(tok)));
- + else
- + DEBUG(0,("%s: command not found\n",CNV_LANG(tok)));
- + }
- + else while (!feof(stdin))
- {
- fstring tok;
- int i;
- @@ -4099,6 +4138,7 @@
- DEBUG(0,("\t-E write messages to stderr instead of stdout\n"));
- DEBUG(0,("\t-U username set the network username\n"));
- DEBUG(0,("\t-W workgroup set the workgroup name\n"));
- + DEBUG(0,("\t-c command string execute semicolon separated commands\n"));
- #ifdef KANJI
- DEBUG(0,("\t-t terminal code terminal i/o code {sjis|euc|jis7|jis8|junet|hex}\n"));
- #endif /* KANJI */
- @@ -4195,10 +4235,9 @@
-
- #ifdef KANJI
- setup_term_code (KANJI);
- - while ((opt = getopt (argc, argv, "B:O:M:i:Nn:d:Pp:l:hI:EB:U:L:t:m:W:T:D:")) != EOF)
- -#else
- - while ((opt = getopt (argc, argv, "B:O:M:i:Nn:d:Pp:l:hI:EB:U:L:m:W:T:D:")) != EOF)
- -#endif /* KANJI */
- +#endif
- + while ((opt =
- + getopt(argc, argv,"B:O:M:i:Nn:d:Pp:l:hI:EB:U:L:t:m:W:T:D:c:")) != EOF)
- switch (opt)
- {
- case 'm':
- @@ -4281,19 +4320,23 @@
- case 'p':
- port = atoi(optarg);
- break;
- + case 'c':
- + cmdstr = optarg;
- + got_pass = True;
- + break;
- case 'h':
- usage(pname);
- exit(0);
- break;
- -#ifdef KANJI
- case 't':
- +#ifdef KANJI
- if (!setup_term_code (optarg)) {
- DEBUG(0, ("%s: unknown terminal code name\n", optarg));
- usage (pname);
- exit (1);
- }
- +#endif
- break;
- -#endif /* KANJI */
- default:
- usage(pname);
- exit(1);
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/clitar.c samba-1.9.16alpha4/source/clitar.c
- --- samba-1.9.16alpha3/source/clitar.c Sat May 4 17:50:23 1996
- +++ samba-1.9.16alpha4/source/clitar.c Sat Jun 1 01:15:11 1996
- @@ -591,7 +591,7 @@
- put_dos_date3(outbuf,smb_vwv1,finfo.mtime);
-
- DEBUG(3,("Setting date to %s (0x%X)",
- - asctime(LocalTime(&finfo.mtime,GMT_TO_LOCAL)),
- + asctime(LocalTime(&finfo.mtime)),
- finfo.mtime));
-
- send_smb(Client,outbuf);
- @@ -1655,7 +1655,7 @@
- if (sys_stat(argv[Optind], &stbuf) == 0) {
- newer_than = stbuf.st_mtime;
- DEBUG(1,("Getting files newer than %s",
- - asctime(LocalTime(&newer_than,GMT_TO_LOCAL))));
- + asctime(LocalTime(&newer_than))));
- Optind++;
- } else {
- DEBUG(0,("Error setting newer-than time\n"));
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/cvs.log samba-1.9.16alpha4/source/cvs.log
- --- samba-1.9.16alpha3/source/cvs.log Wed May 29 17:54:54 1996
- +++ samba-1.9.16alpha4/source/cvs.log Sat Jun 1 01:16:32 1996
- @@ -755,3 +755,213 @@
-
-
-
- +
- +****************************************
- +Date: Wednesday May 29, 1996 @ 17:55
- +Author: samba-bu
- +
- +Update of /data/cvs/samba/source
- +In directory arvidsjaur:/samba/samba-bugs/samba/source
- +
- +Modified Files:
- + cvs.log version.h
- +Log Message:
- +preparing for release of 1.9.16alpha3
- +
- +
- +****************************************
- +Date: Wednesday May 29, 1996 @ 23:37
- +Author: samba-bu
- +
- +Update of /data/cvs/samba/source
- +In directory arvidsjaur:/samba/samba-bugs/samba/source
- +
- +Removed Files:
- + cvs.log
- +Log Message:
- +remove cvs.log from cvs, instead use the release script to copy it to
- +the right places
- +
- +
- +
- +****************************************
- +Date: Thursday May 30, 1996 @ 10:06
- +Author: samba-bu
- +
- +Update of /data/cvs/samba/docs
- +In directory arvidsjaur:/samba/samba-bugs/samba/docs
- +
- +Added Files:
- + security_level.txt
- +Log Message:
- +added this ages ago, but forgot to put it in cvs
- +
- +
- +****************************************
- +Date: Thursday May 30, 1996 @ 13:07
- +Author: tridge
- +
- +Update of /data/cvs/samba/examples/thoralf
- +In directory arvidsjaur:/var/tmp/cvs-serv13278/thoralf
- +
- +Log Message:
- +Directory /data/cvs/samba/examples/thoralf added to the repository
- +
- +
- +
- +****************************************
- +Date: Thursday May 30, 1996 @ 13:15
- +Author: tridge
- +
- +Update of /data/cvs/samba/docs
- +In directory arvidsjaur:/var/tmp/cvs-serv13461
- +
- +Modified Files:
- + samba.faq
- +Log Message:
- +- added an entry on WinDD to samba.faq
- +- added a sample smb.conf from Thoralf.Freitag@remserv.rz.fhtw-berlin.de
- +- print the errno when you get a can't change directory error
- +- added installscripts.sh from James_K._Foote.PARC@xerox.com
- +
- +
- +
- +****************************************
- +Date: Thursday May 30, 1996 @ 13:15
- +Author: tridge
- +
- +Update of /data/cvs/samba/examples/thoralf
- +In directory arvidsjaur:/var/tmp/cvs-serv13485
- +
- +Added Files:
- + smb.conf
- +Log Message:
- +- added an entry on WinDD to samba.faq
- +- added a sample smb.conf from Thoralf.Freitag@remserv.rz.fhtw-berlin.de
- +- print the errno when you get a can't change directory error
- +- added installscripts.sh from James_K._Foote.PARC@xerox.com
- +
- +
- +
- +****************************************
- +Date: Thursday May 30, 1996 @ 13:15
- +Author: tridge
- +
- +Update of /data/cvs/samba/source
- +In directory arvidsjaur:/var/tmp/cvs-serv13502
- +
- +Modified Files:
- + Makefile server.c
- +Added Files:
- + installscripts.sh
- +Log Message:
- +- added an entry on WinDD to samba.faq
- +- added a sample smb.conf from Thoralf.Freitag@remserv.rz.fhtw-berlin.de
- +- print the errno when you get a can't change directory error
- +- added installscripts.sh from James_K._Foote.PARC@xerox.com
- +
- +
- +
- +****************************************
- +Date: Friday May 31, 1996 @ 16:09
- +Author: tridge
- +
- +Update of /data/cvs/samba/source
- +In directory arvidsjaur:/var/tmp/cvs-serv14715
- +
- +Modified Files:
- + reply.c
- +Log Message:
- +comment out the code that tries to handle the NT bug where the 2nd
- +passlen is wrong. The fix is worse than the problem :-)
- +
- +
- +
- +****************************************
- +Date: Friday May 31, 1996 @ 16:10
- +Author: tridge
- +
- +Update of /data/cvs/samba/source
- +In directory arvidsjaur:/var/tmp/cvs-serv14774
- +
- +Modified Files:
- + .cvsignore
- +Log Message:
- +add my private makefile to the ignore list
- +
- +
- +
- +
- +****************************************
- +Date: Saturday June 1, 1996 @ 1:09
- +Author: tridge
- +
- +Update of /data/cvs/samba/docs
- +In directory arvidsjaur:/var/tmp/cvs-serv27355
- +
- +Modified Files:
- + samba.faq smb.conf.5 smbclient.1
- +Log Message:
- +Lots of changes!
- +
- +- add faq info on NT printer handling
- +- add "delete readonly" option to help rcs users
- +- add stuff to man pages on new printer options
- +- add "proxy name resolution" option
- +- add "command string" -c option to smbclient (thanks Ken)
- +- split time functions into time.c
- +- rearrange the quotas stuff a bit and fix some bugs
- +- complete rehash of the time handling code thanks to Paul Eggert
- +- fix nmblookup output a bit
- +- add plp print queue parsing from Bertrand Wallrich
- +
- +
- +
- +
- +
- +
- +****************************************
- +Date: Saturday June 1, 1996 @ 1:13
- +Author: tridge
- +
- +Update of /data/cvs/samba/source
- +In directory arvidsjaur:/var/tmp/cvs-serv27417
- +
- +Modified Files:
- + Makefile client.c clitar.c includes.h ipc.c loadparm.c
- + loadparm.h local.h nameserv.c nmblib.c password.c printing.c
- + quotas.c reply.c server.c smb.h smbpasswd.c status.c
- + testparm.c testprns.c util.c
- +Added Files:
- + time.c
- +Log Message:
- +Lots of changes!
- +
- +- add faq info on NT printer handling
- +- add "delete readonly" option to help rcs users
- +- add stuff to man pages on new printer options
- +- add "proxy name resolution" option
- +- add "command string" -c option to smbclient (thanks Ken)
- +- split time functions into time.c
- +- rearrange the quotas stuff a bit and fix some bugs
- +- complete rehash of the time handling code thanks to Paul Eggert
- +- fix nmblookup output a bit
- +- add plp print queue parsing from Bertrand Wallrich
- +
- +
- +
- +
- +
- +
- +****************************************
- +Date: Saturday June 1, 1996 @ 1:16
- +Author: samba-bu
- +
- +Update of /data/cvs/samba/source
- +In directory arvidsjaur:/samba/samba-bugs/samba/source
- +
- +Modified Files:
- + version.h
- +Log Message:
- +preparing for release of 1.9.16alpha4
- +
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/includes.h samba-1.9.16alpha4/source/includes.h
- --- samba-1.9.16alpha3/source/includes.h Sun May 5 17:18:39 1996
- +++ samba-1.9.16alpha4/source/includes.h Sat Jun 1 01:15:11 1996
- @@ -198,27 +198,6 @@
- #include <shadow.h>
- #endif
-
- -/* this might be different on different systems */
- -#ifdef QUOTAS
- -#ifdef LINUX
- -#ifdef __KERNEL__
- -#undef __KERNEL__
- -#include <sys/quota.h>
- -#define __KERNEL__
- -#else
- -#include <sys/quota.h>
- -#endif
- -#include <mntent.h>
- -#else
- -#include <sys/quota.h>
- -#ifndef CRAY
- -#include <devnm.h>
- -#else
- -#include <mntent.h>
- -#endif
- -#endif
- -#endif
- -
- #ifdef SYSLOG
- #include <syslog.h>
- #endif
- @@ -499,6 +478,8 @@
- #define USE_WAITPID
- #define SIGNAL_CAST (void (*)())
- #define DEFAULT_PRINTING PRINT_AIX
- +/* we undef this because sys/param.h is broken in aix. uggh. */
- +#undef MAXHOSTNAMELEN
- #endif
-
-
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/installscripts.sh samba-1.9.16alpha4/source/installscripts.sh
- --- samba-1.9.16alpha3/source/installscripts.sh Thu Jan 1 10:00:00 1970
- +++ samba-1.9.16alpha4/source/installscripts.sh Thu May 30 13:15:57 1996
- @@ -0,0 +1,26 @@
- +#!/bin/sh
- +# this script courtesy of James_K._Foote.PARC@xerox.com
- +INSTALLPERMS=$1
- +BINDIR=$2
- +SRCDIR=$3
- +
- +echo Installing scripts in $BINDIR
- +
- +for d in $BINDIR; do
- + if [ ! -d $d ]; then
- + mkdir $d
- + if [ ! -d $d ]; then
- + echo Failed to make directory $d
- + exit 1
- + fi
- + fi
- +done
- +
- +cp $SRCDIR/smbtar $BINDIR
- +cp $SRCDIR/addtosmbpass $BINDIR
- +echo Setting permissions on scripts
- +chmod $INSTALLPERMS $BINDIR/smbtar
- +chmod $INSTALLPERMS $BINDIR/addtosmbpass
- +
- +echo Scripts installed
- +exit 0
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/ipc.c samba-1.9.16alpha4/source/ipc.c
- --- samba-1.9.16alpha3/source/ipc.c Sun May 5 17:18:39 1996
- +++ samba-1.9.16alpha4/source/ipc.c Sat Jun 1 01:15:12 1996
- @@ -467,7 +467,7 @@
- time_t t = queue->time;
-
- /* the client expects localtime */
- - t += GMT_TO_LOCAL*TimeDiff(t);
- + t -= TimeDiff(t);
-
- PACKI(desc,"W",((snum%0xFF)<<8) | (queue->job%0xFF)); /* uJobId */
- if (uLevel == 1) {
- @@ -479,7 +479,7 @@
- PACKI(desc,"W",n+1); /* uPosition */
- PACKI(desc,"W",queue->status); /* fsStatus */
- PACKS(desc,"z",""); /* pszStatus */
- - PACKI(desc,"D",queue->time); /* ulSubmitted */
- + PACKI(desc,"D",t); /* ulSubmitted */
- PACKI(desc,"D",queue->size); /* ulSize */
- PACKS(desc,"z",queue->file); /* pszComment */
- }
- @@ -488,7 +488,7 @@
- PACKS(desc,"z",queue->user); /* pszUserName */
- PACKI(desc,"W",n+1); /* uPosition */
- PACKI(desc,"W",queue->status); /* fsStatus */
- - PACKI(desc,"D",queue->time); /* ulSubmitted */
- + PACKI(desc,"D",t); /* ulSubmitted */
- PACKI(desc,"D",queue->size); /* ulSize */
- PACKS(desc,"z","Samba"); /* pszComment */
- PACKS(desc,"z",queue->file); /* pszDocument */
- @@ -1289,7 +1289,7 @@
-
- /* the client expects to get localtime, not GMT, in this bit
- (I think, this needs testing) */
- - t = LocalTime(&unixdate,GMT_TO_LOCAL);
- + t = LocalTime(&unixdate);
-
- SIVAL(p,4,0); /* msecs ? */
- CVAL(p,8) = t->tm_hour;
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/loadparm.c samba-1.9.16alpha4/source/loadparm.c
- --- samba-1.9.16alpha3/source/loadparm.c Sat May 4 17:50:24 1996
- +++ samba-1.9.16alpha4/source/loadparm.c Sat Jun 1 01:15:12 1996
- @@ -161,6 +161,7 @@
- BOOL bReadbmpx;
- BOOL bSyslogOnly;
- BOOL bBrowseList;
- + BOOL bProxyNameResolution;
- } global;
-
- static global Globals;
- @@ -236,6 +237,7 @@
- BOOL bSyncAlways;
- char magic_char;
- BOOL *copymap;
- + BOOL bDeleteReadonly;
- char dummy[3]; /* for alignment */
- } service;
-
- @@ -307,6 +309,7 @@
- False, /* bSyncAlways */
- '~', /* magic char */
- NULL, /* copymap */
- + False, /* bDeleteReadonly */
- "" /* dummy */
- };
-
- @@ -413,6 +416,7 @@
- {"domain master", P_BOOL, P_GLOBAL, &Globals.bDomainMaster, NULL},
- {"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL},
- {"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL},
- + {"proxy name resolution",P_BOOL,P_GLOBAL,&Globals.bProxyNameResolution,NULL},
-
- {"-valid", P_BOOL, P_LOCAL, &sDefault.valid, NULL},
- {"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL},
- @@ -493,6 +497,7 @@
- {"magic script", P_STRING, P_LOCAL, &sDefault.szMagicScript, NULL},
- {"magic output", P_STRING, P_LOCAL, &sDefault.szMagicOutput, NULL},
- {"mangled map", P_STRING, P_LOCAL, &sDefault.szMangledMap, NULL},
- + {"delete readonly", P_BOOL, P_LOCAL, &sDefault.bDeleteReadonly, NULL},
-
- {NULL, P_BOOL, P_NONE, NULL, NULL}
- };
- @@ -568,6 +573,7 @@
- Globals.bDomainMaster = False;
- Globals.bDomainLogons = False;
- Globals.bBrowseList = True;
- + Globals.bProxyNameResolution = True;
-
- #ifdef KANJI
- coding_system = interpret_coding_system (KANJI, SJIS_CODE);
- @@ -595,6 +601,7 @@
- {
- case PRINT_BSD:
- case PRINT_AIX:
- + case PRINT_PLP:
- string_initial(&sDefault.szLpqcommand,"lpq -P%p");
- string_initial(&sDefault.szLprmcommand,"lprm -P%p %j");
- string_initial(&sDefault.szPrintcommand,"lpr -r -P%p %s");
- @@ -705,6 +712,7 @@
- FN_GLOBAL_BOOL(lp_encrypted_passwords,&Globals.bEncryptPasswords)
- FN_GLOBAL_BOOL(lp_syslog_only,&Globals.bSyslogOnly)
- FN_GLOBAL_BOOL(lp_browse_list,&Globals.bBrowseList)
- +FN_GLOBAL_BOOL(lp_proxy_name_resolution,&Globals.bProxyNameResolution)
-
- FN_GLOBAL_INTEGER(lp_os_level,&Globals.os_level)
- FN_GLOBAL_INTEGER(lp_max_ttl,&Globals.max_ttl)
- @@ -778,6 +786,7 @@
- FN_LOCAL_BOOL(lp_widelinks,bWidelinks)
- FN_LOCAL_BOOL(lp_syncalways,bSyncAlways)
- FN_LOCAL_BOOL(lp_map_system,bMap_system)
- +FN_LOCAL_BOOL(lp_delete_readonly,bDeleteReadonly)
-
- FN_LOCAL_INTEGER(lp_create_mode,iCreate_mode)
- FN_LOCAL_INTEGER(lp_max_connections,iMaxConnections)
- @@ -1291,6 +1300,8 @@
- *val = PRINT_BSD;
- else if (strequal(pszParmValue,"qnx"))
- *val = PRINT_QNX;
- + else if (strequal(pszParmValue,"plp"))
- + *val = PRINT_PLP;
- return(True);
- }
-
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/loadparm.h samba-1.9.16alpha4/source/loadparm.h
- --- samba-1.9.16alpha3/source/loadparm.h Sat May 4 17:50:24 1996
- +++ samba-1.9.16alpha4/source/loadparm.h Sat Jun 1 01:15:12 1996
- @@ -79,6 +79,7 @@
- extern BOOL lp_encrypted_passwords(void);
- extern BOOL lp_syslog_only(void);
- extern BOOL lp_browse_list(void);
- +extern BOOL lp_proxy_name_resolution(void);
- extern int lp_numservices(void);
- extern int lp_keepalive(void);
- extern int lp_passwordlevel(void);
- @@ -154,6 +155,7 @@
- extern int lp_max_connections(int iService);
- extern BOOL lp_add_home(char *pservice,int ifrom,char *phome);
- extern char *lp_string(char *s);
- +extern BOOL lp_delete_readonly(int iService);
- char *my_workgroup(void);
-
- #endif
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/local.h samba-1.9.16alpha4/source/local.h
- --- samba-1.9.16alpha3/source/local.h Mon May 6 10:35:45 1996
- +++ samba-1.9.16alpha4/source/local.h Sat Jun 1 01:15:12 1996
- @@ -83,12 +83,6 @@
- manager window? */
- #define FSTYPE_STRING "Samba"
-
- -/* we have two time standards - local and GMT. This will try to sort them out.
- - */
- -
- -#define LOCAL_TO_GMT 1
- -#define GMT_TO_LOCAL (-1)
- -
- /* do you want smbd to send a 1 byte packet to nmbd to trigger it to start
- when smbd starts? */
- #ifndef PRIME_NMBD
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/nameserv.c samba-1.9.16alpha4/source/nameserv.c
- --- samba-1.9.16alpha3/source/nameserv.c Sat May 4 17:50:24 1996
- +++ samba-1.9.16alpha4/source/nameserv.c Sat Jun 1 01:15:12 1996
- @@ -1798,6 +1798,11 @@
- return;
- }
-
- + if (!lp_proxy_name_resolution() && n->source != SELF) {
- + DEBUG(3,("no proxy resolution\n"));
- + return;
- + }
- +
- /* don't respond to bcast queries for addresses on the same net as the
- machine doing the querying unless its our IP */
- if (bcast &&
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/nmblib.c samba-1.9.16alpha4/source/nmblib.c
- --- samba-1.9.16alpha3/source/nmblib.c Sat May 4 17:50:24 1996
- +++ samba-1.9.16alpha4/source/nmblib.c Sat Jun 1 01:15:12 1996
- @@ -625,16 +625,17 @@
- char qname[17];
- int type;
- fstring flags;
- + int i;
- *flags = 0;
- StrnCpy(qname,p,15);
- type = CVAL(p,15);
- p += 16;
-
- - if (p[0] & 0x80) strcat(flags,"<GROUP> ");
- - if ((p[0] & 0x60) == 0) strcat(flags,"B ");
- - if ((p[0] & 0x60) == 1) strcat(flags,"P ");
- - if ((p[0] & 0x60) == 2) strcat(flags,"M ");
- - if ((p[0] & 0x60) == 3) strcat(flags,"_ ");
- + strcat(flags, (p[0] & 0x80) ? "<GROUP> " : " ");
- + if ((p[0] & 0x60) == 0x00) strcat(flags,"B ");
- + if ((p[0] & 0x60) == 0x20) strcat(flags,"P ");
- + if ((p[0] & 0x60) == 0x40) strcat(flags,"M ");
- + if ((p[0] & 0x60) == 0x60) strcat(flags,"_ ");
- if (p[0] & 0x10) strcat(flags,"<DEREGISTERING> ");
- if (p[0] & 0x08) strcat(flags,"<CONFLICT> ");
- if (p[0] & 0x04) strcat(flags,"<ACTIVE> ");
- @@ -650,7 +651,10 @@
- trim_string(rname,NULL," ");
- }
-
- - DEBUG(level,("\t%s (type=0x%x)\t%s\n",qname,type,flags));
- + for (i = strlen( qname) ; --i >= 0 ; ) {
- + if (!isprint(qname[i])) qname[i] = '.';
- + }
- + DEBUG(level,("\t%-15s <%02x> - %s\n",qname,type,flags));
- p+=2;
- }
- DEBUG(level,("num_good_sends=%d num_good_receives=%d\n",
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/password.c samba-1.9.16alpha4/source/password.c
- --- samba-1.9.16alpha3/source/password.c Wed May 29 17:54:24 1996
- +++ samba-1.9.16alpha4/source/password.c Sat Jun 1 01:15:12 1996
- @@ -287,15 +287,13 @@
- #ifdef OSF1_ENH_SEC
- struct pr_passwd *mypasswd;
- time_t starttime;
- - long tz;
-
- mypasswd = getprpwnam (user);
- starttime = time (NULL);
- - tz = mktime ( localtime ( &starttime ) );
-
- if (result)
- {
- - mypasswd->ufld.fd_slogin = tz;
- + mypasswd->ufld.fd_slogin = starttime;
- mypasswd->ufld.fd_nlogins = 0;
-
- putprpwnam(user,mypasswd);
- @@ -304,7 +302,7 @@
- }
- else
- {
- - mypasswd->ufld.fd_ulogin = tz;
- + mypasswd->ufld.fd_ulogin = starttime;
- mypasswd->ufld.fd_nlogins = mypasswd->ufld.fd_nlogins + 1;
- if ( mypasswd->ufld.fd_max_tries != 0 && mypasswd->ufld.fd_nlogins > mypasswd->ufld.fd_max_tries )
- {
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/printing.c samba-1.9.16alpha4/source/printing.c
- --- samba-1.9.16alpha3/source/printing.c Sat May 4 17:50:24 1996
- +++ samba-1.9.16alpha4/source/printing.c Sat Jun 1 01:15:12 1996
- @@ -149,7 +149,7 @@
- ********************************************************************/
- static time_t EntryTime(string tok[], int ptr, int count, int minimum)
- {
- - time_t jobtime;
- + time_t jobtime,jobtime1;
-
- jobtime = time(NULL); /* default case: take current time */
- if (count >= minimum) {
- @@ -181,7 +181,9 @@
- t->tm_hour = hour;
- t->tm_min = min;
- t->tm_sec = sec;
- - jobtime = mktime(t);
- + jobtime1 = mktime(t);
- + if (jobtime1 != (time_t)-1)
- + jobtime = jobtime1;
- }
- }
- return jobtime;
- @@ -596,6 +598,78 @@
- }
-
-
- +/****************************************************************************
- + parse a lpq line for the plp printing system
- + Bertrand Wallrich <Bertrand.Wallrich@loria.fr>
- +****************************************************************************/
- +static BOOL parse_lpq_plp(char *line,print_queue_struct *buf,BOOL first)
- +{
- + string tok[5];
- + int count=0;
- +
- + /* handle the case of "(standard input)" as a filename */
- + string_sub(line,"stdin","STDIN");
- + string_sub(line,"(","\"");
- + string_sub(line,")","\"");
- +
- + for (count=0; count<8 && next_token(&line,tok[count],NULL); count++) ;
- +
- + /* we must get 5 tokens */
- + if (count < 8)
- + return(False);
- +
- + /* the 4rd must be integer */
- + if (!isdigit(*tok[3])) return(False);
- +
- + /* if the fname contains a space then use STDIN */
- + if (strchr(tok[3],' '))
- + strcpy(tok[3],"STDIN");
- +
- + /* only take the last part of the filename */
- + {
- + string tmp;
- + char *p = strrchr(tok[5],'/');
- + if (p)
- + {
- + strcpy(tmp,p+1);
- + strcpy(tok[5],tmp);
- + }
- + }
- +
- +
- + buf->job = atoi(tok[3]);
- +
- + /* calcul de la taille du fichier */
- + if (!isdigit(*tok[7])) { buf->size = atoi(tok[7]) * 1.0 ; }
- + else {
- + string tmp;
- + strcpy(tmp,tok[7]);
- + if (strchr(tok[7],'K')) {
- + strncpy(tok[7],tmp,strlen(tmp)-1);
- + buf->size = atoi(tok[7]);
- + buf->size = buf->size * 1024;
- + }
- + if (strchr(tok[7],'M')) {
- + strncpy(tok[7],tmp,strlen(tmp)-1);
- + buf->size = atoi(tok[7]);
- + buf->size = buf->size * 1024.0 * 1000.0;
- + }
- + if (strchr(tok[7],'G')) {
- + strncpy(tok[7],tmp,strlen(tmp)-1);
- + buf->size = atoi(tok[7]);
- + buf->size = buf->size * 1024.0 * 1000000.0;
- + }
- +
- + }
- + buf->status = strequal(tok[0],"active")?LPQ_PRINTING:LPQ_QUEUED;
- + buf->priority = 0;
- + buf->time = time(NULL);
- + StrnCpy(buf->user,tok[1],sizeof(buf->user)-1);
- + StrnCpy(buf->file,tok[5],sizeof(buf->file)-1);
- + return(True);
- +}
- +
- +
-
- char *stat0_strings[] = { "enabled", "online", "idle", "no entries", "free", "ready", NULL };
- char *stat1_strings[] = { "offline", "disabled", "down", "off", "waiting", "no daemon", NULL };
- @@ -623,6 +697,9 @@
- break;
- case PRINT_QNX:
- ret = parse_lpq_qnx(line,buf,first);
- + break;
- + case PRINT_PLP:
- + ret = parse_lpq_plp(line,buf,first);
- break;
- default:
- ret = parse_lpq_bsd(line,buf,first);
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/quotas.c samba-1.9.16alpha4/source/quotas.c
- --- samba-1.9.16alpha3/source/quotas.c Sun May 5 21:25:13 1996
- +++ samba-1.9.16alpha4/source/quotas.c Sat Jun 1 01:15:12 1996
- @@ -1,3 +1,4 @@
- +#ifdef QUOTAS
- /*
- Unix SMB/Netbios implementation.
- Version 1.9.
- @@ -19,12 +20,28 @@
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
- -#include "includes.h"
-
- +/*
- + * This is one of the most system dependent parts of Samba, and its
- + * done a litle differently. Each system has its own way of doing
- + * things :-(
- + */
- +
- +#include "includes.h"
-
- -#ifdef QUOTAS
-
- #ifdef LINUX
- +
- +#ifdef __KERNEL__
- +# undef __KERNEL__
- +# include <sys/quota.h>
- +# define __KERNEL__
- +#else
- +# include <sys/quota.h>
- +#endif
- +
- +#include <mntent.h>
- +
- /****************************************************************************
- try to get the disk space from disk quotas (LINUX version)
- ****************************************************************************/
- @@ -115,6 +132,10 @@
- }
-
- #elif defined(CRAY)
- +
- +#include <sys/quota.h>
- +#include <mntent.h>
- +
- /****************************************************************************
- try to get the disk space from disk quotas (CRAY VERSION)
- ****************************************************************************/
- @@ -214,6 +235,7 @@
-
- #elif defined(SUNOS5)
-
- +#include <devnm.h>
- #include <fcntl.h>
- #include <sys/fs/ufs_quota.h>
-
- @@ -228,30 +250,33 @@
- struct dqblk D;
- struct quotctl command;
- int file;
- + int ret;
-
- if((file=open(path, O_RDONLY))<0) return(False);
-
- euser_id = geteuid();
- user_id = getuid();
-
- - setuid(0); /* Solaris seems to want to give info only to super-user */
- - seteuid(0);
- -
- command.op = Q_GETQUOTA;
- command.uid = euser_id;
- command.addr = (caddr_t) &D;
-
- - if(ioctl(file, Q_QUOTACTL, &command)<0)
- - {
- - close(file);
- - DEBUG(2,("disk_quotas ioctl (Solaris) failed\n"));
- - return(False);
- - }
- - close(file);
- + setuid(0); /* Solaris seems to want to give info only to super-user */
- + seteuid(0);
- +
- + ret = ioctl(file, Q_QUOTACTL, &command);
-
- setuid(user_id); /* Restore the original UID status */
- seteuid(euser_id);
-
- + if (ret < 0) {
- + close(file);
- + DEBUG(2,("disk_quotas ioctl (Solaris) failed\n"));
- + return(False);
- + }
- + close(file);
- +
- +
- /* Use softlimit to determine disk space. A user exceeding the quota is told
- * that there's no space left. Writes might actually work for a bit if the
- * hardlimit is set higher than softlimit. Effectively the disk becomes
- @@ -275,6 +300,9 @@
-
- #else
-
- +#include <sys/quota.h>
- +#include <devnm.h>
- +
- /****************************************************************************
- try to get the disk space from disk quotas - default version
- ****************************************************************************/
- @@ -327,4 +355,5 @@
- }
-
- #endif
- -#endif
- +#endif /* QUOTAS */
- +
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/reply.c samba-1.9.16alpha4/source/reply.c
- --- samba-1.9.16alpha3/source/reply.c Sat May 4 17:50:24 1996
- +++ samba-1.9.16alpha4/source/reply.c Sat Jun 1 01:15:12 1996
- @@ -334,11 +334,13 @@
- StrnCpy(smb_apasswd,p + passlen1,smb_apasslen);
- }
- }
- +#if NT_WORKAROUND
- if (passlen2 == 1) {
- /* apparently NT sometimes sets passlen2 to 1 when it means 0. This
- tries to work around that problem */
- passlen2 = 0;
- }
- +#endif
- p += passlen1 + passlen2;
- strcpy(user,p); p = skip_string(p,1);
- DEBUG(3,("Domain=[%s] NativeOS=[%s] NativeLanMan=[%s]\n",
- @@ -1179,7 +1181,9 @@
- if (sys_lstat(fname,&sbuf) != 0) return(False);
- fmode = dos_mode(cnum,fname,&sbuf);
- if (fmode & aDIR) return(False);
- - if (fmode & aRONLY) return(False);
- + if (!lp_delete_readonly(SNUM(cnum))) {
- + if (fmode & aRONLY) return(False);
- + }
- if ((fmode & ~dirtype) & (aHIDDEN | aSYSTEM))
- return(False);
- if (!check_file_sharing(cnum,fname)) return(False);
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/server.c samba-1.9.16alpha4/source/server.c
- --- samba-1.9.16alpha3/source/server.c Wed May 29 17:54:25 1996
- +++ samba-1.9.16alpha4/source/server.c Sat Jun 1 01:15:12 1996
- @@ -2456,6 +2456,8 @@
- int find_free_file(void )
- {
- int i;
- + /* we start at 1 here for an obscure reason I can't now remember,
- + but I think is important :-) */
- for (i=1;i<MAX_OPEN_FILES;i++)
- if (!Files[i].open)
- return(i);
- @@ -2626,6 +2628,7 @@
- int capabilities=0x300; /* has dual names + lock_and_read */
- int secword=0;
- BOOL doencrypt = SMBENCRYPT();
- + time_t t = time(NULL);
-
- if (lp_security()>=SEC_USER) secword |= 1;
- if (doencrypt) secword |= 2;
- @@ -2660,8 +2663,8 @@
- SIVAL(outbuf,smb_vwv3+1,0xFFFF); /* max buffer */
- SIVAL(outbuf,smb_vwv5+1,0xFFFF); /* raw size */
- SIVAL(outbuf,smb_vwv9+1,capabilities); /* capabilities */
- - put_long_date(outbuf+smb_vwv11+1,time(NULL));
- - SSVALS(outbuf,smb_vwv15+1,TimeDiff(time(NULL))/60);
- + put_long_date(outbuf+smb_vwv11+1,t);
- + SSVALS(outbuf,smb_vwv15+1,TimeDiff(t)/60);
-
- return (smb_len(outbuf)+4);
- }
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/smb.h samba-1.9.16alpha4/source/smb.h
- --- samba-1.9.16alpha3/source/smb.h Sat May 4 17:50:24 1996
- +++ samba-1.9.16alpha4/source/smb.h Sat Jun 1 01:15:12 1996
- @@ -624,7 +624,6 @@
- int get_share_mode(int cnum,struct stat *sbuf,int *pid);
- void del_share_mode(int fnum);
- BOOL set_share_mode(int fnum,int mode);
- -int DSTDiff(time_t t);
- void TimeInit(void);
- void put_long_date(char *p,time_t t);
- time_t interpret_long_date(char *p);
- @@ -822,14 +821,12 @@
- void close_cnum(int cnum,int uid);
- char *smb_errstr(char *inbuf);
- void GetTimeOfDay(struct timeval *tval);
- -struct tm *LocalTime(time_t *t,int);
- +struct tm *LocalTime(time_t *t);
- int TimeDiff(time_t t);
- BOOL set_filetime(char *fname,time_t mtime);
- char *dirname_dos(char *path,char *buf);
- BOOL get_myname(char *myname,struct in_addr *ip);
- void expand_mask(char *Mask, BOOL);
- -BOOL sane_unix_date(time_t unixdate);
- -time_t start_of_month(void);
- char *smb_fn_name(int cnum);
- void get_machine_info(void);
- int open_socket_in(int type, int port, int dlevel);
- @@ -966,7 +963,8 @@
- enum security_types {SEC_SHARE,SEC_USER,SEC_SERVER};
-
- /* printing types */
- -enum printing_types {PRINT_BSD,PRINT_SYSV,PRINT_AIX,PRINT_HPUX,PRINT_QNX};
- +enum printing_types {PRINT_BSD,PRINT_SYSV,PRINT_AIX,PRINT_HPUX,
- + PRINT_QNX,PRINT_PLP};
-
-
- /* case handling */
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/smbpasswd.c samba-1.9.16alpha4/source/smbpasswd.c
- --- samba-1.9.16alpha3/source/smbpasswd.c Wed May 29 17:54:25 1996
- +++ samba-1.9.16alpha4/source/smbpasswd.c Sat Jun 1 01:15:13 1996
- @@ -232,6 +232,8 @@
- char *pfile = SMB_PASSWD_FILE;
- char readbuf[16 * 1024];
-
- + TimeInit();
- +
- setup_logging(argv[0],True);
-
- charset_initialise();
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/status.c samba-1.9.16alpha4/source/status.c
- --- samba-1.9.16alpha3/source/status.c Mon May 6 10:35:46 1996
- +++ samba-1.9.16alpha4/source/status.c Sat Jun 1 01:15:13 1996
- @@ -58,6 +58,7 @@
- BOOL processes_only=False;
- int last_pid=0;
-
- + TimeInit();
- setup_logging(argv[0],True);
-
- charset_initialise();
- @@ -146,7 +147,7 @@
- printf("%-10.10s %-8s %-8s %5d %-8s (%s) %s",
- crec.name,uidtoname(crec.uid),gidtoname(crec.gid),crec.pid,
- crec.machine,crec.addr,
- - asctime(LocalTime(&crec.start,GMT_TO_LOCAL)));
- + asctime(LocalTime(&crec.start)));
- }
- }
- fclose(f);
- @@ -217,7 +218,7 @@
- case 1: printf("WRONLY "); break;
- case 2: printf("RDWR "); break;
- }
- - printf(" %s %s",fname,asctime(LocalTime(&t,GMT_TO_LOCAL)));
- + printf(" %s %s",fname,asctime(LocalTime(&t)));
- }
- closedir(dir);
-
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/testparm.c samba-1.9.16alpha4/source/testparm.c
- --- samba-1.9.16alpha3/source/testparm.c Sat May 4 17:50:25 1996
- +++ samba-1.9.16alpha4/source/testparm.c Sat Jun 1 01:15:13 1996
- @@ -46,6 +46,8 @@
- pstring configfile;
- int s;
-
- + TimeInit();
- +
- setup_logging(argv[0],True);
-
- charset_initialise();
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/testprns.c samba-1.9.16alpha4/source/testprns.c
- --- samba-1.9.16alpha3/source/testprns.c Sat May 4 17:50:25 1996
- +++ samba-1.9.16alpha4/source/testprns.c Sat Jun 1 01:15:13 1996
- @@ -43,6 +43,8 @@
- {
- char *pszTemp;
-
- + TimeInit();
- +
- setup_logging(argv[0],True);
-
- charset_initialise();
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/time.c samba-1.9.16alpha4/source/time.c
- --- samba-1.9.16alpha3/source/time.c Thu Jan 1 10:00:00 1970
- +++ samba-1.9.16alpha4/source/time.c Sat Jun 1 01:13:08 1996
- @@ -0,0 +1,495 @@
- +/*
- + Unix SMB/Netbios implementation.
- + Version 1.9.
- + time handling functions
- + Copyright (C) Andrew Tridgell 1992-1995
- +
- + This program is free software; you can redistribute it and/or modify
- + it under the terms of the GNU General Public License as published by
- + the Free Software Foundation; either version 2 of the License, or
- + (at your option) any later version.
- +
- + This program is distributed in the hope that it will be useful,
- + but WITHOUT ANY WARRANTY; without even the implied warranty of
- + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + GNU General Public License for more details.
- +
- + You should have received a copy of the GNU General Public License
- + along with this program; if not, write to the Free Software
- + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- +*/
- +
- +#include "includes.h"
- +
- +/*
- + This stuff was largely rewritten by Paul Eggert <eggert@twinsun.com>
- + in May 1996
- + */
- +
- +
- +int serverzone=0;
- +int extra_time_offset = 0;
- +
- +extern int DEBUGLEVEL;
- +
- +#ifndef CHAR_BIT
- +#define CHAR_BIT 8
- +#endif
- +
- +#ifndef TIME_T_MIN
- +#define TIME_T_MIN (0 < (time_t) -1 ? (time_t) 0 \
- + : ~ (time_t) 0 << (sizeof (time_t) * CHAR_BIT - 1))
- +#endif
- +#ifndef TIME_T_MAX
- +#define TIME_T_MAX (~ (time_t) 0 - TIME_T_MIN)
- +#endif
- +
- +
- +
- +/*******************************************************************
- +a gettimeofday wrapper
- +********************************************************************/
- +void GetTimeOfDay(struct timeval *tval)
- +{
- +#ifdef GETTIMEOFDAY1
- + gettimeofday(tval);
- +#else
- + gettimeofday(tval,NULL);
- +#endif
- +}
- +
- +#define TM_YEAR_BASE 1900
- +
- +/*******************************************************************
- +yield the difference between *A and *B, in seconds, ignoring leap seconds
- +********************************************************************/
- +static int tm_diff(struct tm *a, struct tm *b)
- +{
- + int ay = a->tm_year + (TM_YEAR_BASE - 1);
- + int by = b->tm_year + (TM_YEAR_BASE - 1);
- + int intervening_leap_days =
- + (ay/4 - by/4) - (ay/100 - by/100) + (ay/400 - by/400);
- + int years = ay - by;
- + int days = 365*years + intervening_leap_days + (a->tm_yday - b->tm_yday);
- + int hours = 24*days + (a->tm_hour - b->tm_hour);
- + int minutes = 60*hours + (a->tm_min - b->tm_min);
- + int seconds = 60*minutes + (a->tm_sec - b->tm_sec);
- + return seconds;
- +}
- +
- +/*******************************************************************
- + return the UTC offset in seconds west of UTC
- + ******************************************************************/
- +static int TimeZone(time_t t)
- +{
- + struct tm tm_utc = *(gmtime(&t));
- + return tm_diff(&tm_utc,localtime(&t));
- +}
- +
- +
- +/*******************************************************************
- +init the time differences
- +********************************************************************/
- +void TimeInit(void)
- +{
- + serverzone = TimeZone(time(NULL));
- + DEBUG(4,("Serverzone is %d\n",serverzone));
- +}
- +
- +
- +/*******************************************************************
- +return the same value as TimeZone, but it should be more efficient.
- +
- +We keep a table of DST offsets to prevent calling localtime() on each
- +call of this function. This saves a LOT of time on many unixes.
- +
- +Updated by Paul Eggert <eggert@twinsun.com>
- +********************************************************************/
- +static int TimeZoneFaster(time_t t)
- +{
- + static struct dst_table {time_t start,end; int zone;} *dst_table = NULL;
- + static int table_size = 0;
- + int i;
- + int zone = 0;
- +
- + if (t == 0) t = time(NULL);
- +
- + /* Tunis has a 8 day DST region, we need to be careful ... */
- +#define MAX_DST_WIDTH (365*24*60*60)
- +#define MAX_DST_SKIP (7*24*60*60)
- +
- + for (i=0;i<table_size;i++)
- + if (t >= dst_table[i].start && t <= dst_table[i].end) break;
- +
- + if (i<table_size) {
- + zone = dst_table[i].zone;
- + } else {
- + time_t low,high;
- +
- + zone = TimeZone(t);
- + dst_table = (struct dst_table *)Realloc(dst_table,
- + sizeof(dst_table[0])*(i+1));
- + if (!dst_table) {
- + table_size = 0;
- + } else {
- + table_size++;
- +
- + dst_table[i].zone = zone;
- + dst_table[i].start = dst_table[i].end = t;
- +
- + /* no entry will cover more than 6 months */
- + low = t - MAX_DST_WIDTH/2;
- + if (t < low)
- + low = TIME_T_MIN;
- +
- + /* widen the new entry using two bisection searches */
- + while (low+60*60 < dst_table[i].start) {
- + if (dst_table[i].start - low > MAX_DST_SKIP*2)
- + t = dst_table[i].start - MAX_DST_SKIP;
- + else
- + t = low + (dst_table[i].start-low)/2;
- + if (TimeZone(t) == zone)
- + dst_table[i].start = t;
- + else
- + low = t;
- + }
- +
- + high = low + MAX_DST_WIDTH/2;
- + if (high < t)
- + high = TIME_T_MAX;
- +
- + while (high-60*60 > dst_table[i].end) {
- + if (high - dst_table[i].end > MAX_DST_SKIP*2)
- + t = dst_table[i].end + MAX_DST_SKIP;
- + else
- + t = high - (high-dst_table[i].end)/2;
- + if (TimeZone(t) == zone)
- + dst_table[i].end = t;
- + else
- + high = t;
- + }
- +#if 0
- + DEBUG(1,("Added DST entry from %s ",
- + asctime(localtime(&dst_table[i].start))));
- + DEBUG(1,("to %s (%d)\n",asctime(localtime(&dst_table[i].end)),
- + dst_table[i].zone));
- +#endif
- + }
- + }
- + return zone;
- +}
- +
- +/****************************************************************************
- + return the UTC offset in seconds west of UTC, adjusted for extra time offset
- + **************************************************************************/
- +int TimeDiff(time_t t)
- +{
- + return TimeZoneFaster(t) + 60*extra_time_offset;
- +}
- +
- +
- +/****************************************************************************
- + return the UTC offset in seconds west of UTC, adjusted for extra time
- + offset, for a local time value. If ut = lt + LocTimeDiff(lt), then
- + lt = ut - TimeDiff(ut), but the converse does not necessarily hold near
- + daylight savings transitions because some local times are ambiguous.
- + LocTimeDiff(t) equals TimeDiff(t) except near daylight savings transitions.
- + +**************************************************************************/
- +static int LocTimeDiff(time_t lte)
- +{
- + time_t lt = lte - 60*extra_time_offset;
- + int d = TimeZoneFaster(lt);
- + time_t t = lt + d;
- +
- + /* if overflow occurred, ignore all the adjustments so far */
- + if (((lte < lt) ^ (extra_time_offset < 0)) | ((t < lt) ^ (d < 0)))
- + t = lte;
- +
- + /* now t should be close enough to the true UTC to yield the right answer */
- + return TimeDiff(t);
- +}
- +
- +
- +/****************************************************************************
- +try to optimise the localtime call, it can be quite expenive on some machines
- +****************************************************************************/
- +struct tm *LocalTime(time_t *t)
- +{
- + time_t t2 = *t;
- +
- + t2 -= TimeDiff(t2);
- +
- + return(gmtime(&t2));
- +}
- +
- +
- +#define TIME_FIXUP_CONSTANT (369.0*365.25*24*60*60-(3.0*24*60*60+6.0*60*60))
- +
- +/****************************************************************************
- +interpret an 8 byte "filetime" structure to a time_t
- +It's originally in "100ns units since jan 1st 1601"
- +
- +It appears to be kludge-GMT (at least for file listings). This means
- +its the GMT you get by taking a localtime and adding the
- +serverzone. This is NOT the same as GMT in some cases. This routine
- +converts this to real GMT.
- +****************************************************************************/
- +time_t interpret_long_date(char *p)
- +{
- + double d;
- + time_t ret;
- + uint32 tlow,thigh;
- + tlow = IVAL(p,0);
- + thigh = IVAL(p,4);
- +
- + if (thigh == 0) return(0);
- +
- + d = ((double)thigh)*4.0*(double)(1<<30);
- + d += (tlow&0xFFF00000);
- + d *= 1.0e-7;
- +
- + /* now adjust by 369 years to make the secs since 1970 */
- + d -= TIME_FIXUP_CONSTANT;
- +
- + if (!(TIME_T_MIN <= d && d <= TIME_T_MAX))
- + return(0);
- +
- + ret = (time_t)(d+0.5);
- +
- + /* this takes us from kludge-GMT to real GMT */
- + ret -= serverzone;
- + ret += LocTimeDiff(ret);
- +
- + return(ret);
- +}
- +
- +
- +/****************************************************************************
- +put a 8 byte filetime from a time_t
- +This takes real GMT as input and converts to kludge-GMT
- +****************************************************************************/
- +void put_long_date(char *p,time_t t)
- +{
- + uint32 tlow,thigh;
- + double d;
- +
- + if (t==0) {
- + SIVAL(p,0,0); SIVAL(p,4,0);
- + return;
- + }
- +
- + /* this converts GMT to kludge-GMT */
- + t -= TimeDiff(t) - serverzone;
- +
- + d = (double) (t);
- +
- + d += TIME_FIXUP_CONSTANT;
- +
- + d *= 1.0e7;
- +
- + thigh = (uint32)(d * (1.0/(4.0*(double)(1<<30))));
- + tlow = (uint32)(d - ((double)thigh)*4.0*(double)(1<<30));
- +
- + SIVAL(p,0,tlow);
- + SIVAL(p,4,thigh);
- +}
- +
- +
- +/****************************************************************************
- +check if it's a null mtime
- +****************************************************************************/
- +static BOOL null_mtime(time_t mtime)
- +{
- + if (mtime == 0 || mtime == 0xFFFFFFFF || mtime == (time_t)-1)
- + return(True);
- + return(False);
- +}
- +
- +/*******************************************************************
- + create a 16 bit dos packed date
- +********************************************************************/
- +static uint16 make_dos_date1(time_t unixdate,struct tm *t)
- +{
- + uint16 ret=0;
- + ret = (((unsigned)(t->tm_mon+1)) >> 3) | ((t->tm_year-80) << 1);
- + ret = ((ret&0xFF)<<8) | (t->tm_mday | (((t->tm_mon+1) & 0x7) << 5));
- + return(ret);
- +}
- +
- +/*******************************************************************
- + create a 16 bit dos packed time
- +********************************************************************/
- +static uint16 make_dos_time1(time_t unixdate,struct tm *t)
- +{
- + uint16 ret=0;
- + ret = ((((unsigned)t->tm_min >> 3)&0x7) | (((unsigned)t->tm_hour) << 3));
- + ret = ((ret&0xFF)<<8) | ((t->tm_sec/2) | ((t->tm_min & 0x7) << 5));
- + return(ret);
- +}
- +
- +/*******************************************************************
- + create a 32 bit dos packed date/time from some parameters
- + This takes a GMT time and returns a packed localtime structure
- +********************************************************************/
- +static uint32 make_dos_date(time_t unixdate)
- +{
- + struct tm *t;
- + uint32 ret=0;
- +
- + t = LocalTime(&unixdate);
- +
- + ret = make_dos_date1(unixdate,t);
- + ret = ((ret&0xFFFF)<<16) | make_dos_time1(unixdate,t);
- +
- + return(ret);
- +}
- +
- +/*******************************************************************
- +put a dos date into a buffer (time/date format)
- +This takes GMT time and puts local time in the buffer
- +********************************************************************/
- +void put_dos_date(char *buf,int offset,time_t unixdate)
- +{
- + uint32 x = make_dos_date(unixdate);
- + SIVAL(buf,offset,x);
- +}
- +
- +/*******************************************************************
- +put a dos date into a buffer (date/time format)
- +This takes GMT time and puts local time in the buffer
- +********************************************************************/
- +void put_dos_date2(char *buf,int offset,time_t unixdate)
- +{
- + uint32 x = make_dos_date(unixdate);
- + x = ((x&0xFFFF)<<16) | ((x&0xFFFF0000)>>16);
- + SIVAL(buf,offset,x);
- +}
- +
- +/*******************************************************************
- +put a dos 32 bit "unix like" date into a buffer. This routine takes
- +GMT and converts it to LOCAL time before putting it (most SMBs assume
- +localtime for this sort of date)
- +********************************************************************/
- +void put_dos_date3(char *buf,int offset,time_t unixdate)
- +{
- + if (!null_mtime(unixdate))
- + unixdate -= TimeDiff(unixdate);
- + SIVAL(buf,offset,unixdate);
- +}
- +
- +/*******************************************************************
- + interpret a 32 bit dos packed date/time to some parameters
- +********************************************************************/
- +static void interpret_dos_date(uint32 date,int *year,int *month,int *day,int *hour,int *minute,int *second)
- +{
- + uint32 p0,p1,p2,p3;
- +
- + p0=date&0xFF; p1=((date&0xFF00)>>8)&0xFF;
- + p2=((date&0xFF0000)>>16)&0xFF; p3=((date&0xFF000000)>>24)&0xFF;
- +
- + *second = 2*(p0 & 0x1F);
- + *minute = ((p0>>5)&0xFF) + ((p1&0x7)<<3);
- + *hour = (p1>>3)&0xFF;
- + *day = (p2&0x1F);
- + *month = ((p2>>5)&0xFF) + ((p3&0x1)<<3) - 1;
- + *year = ((p3>>1)&0xFF) + 80;
- +}
- +
- +/*******************************************************************
- + create a unix date (int GMT) from a dos date (which is actually in
- + localtime)
- +********************************************************************/
- +time_t make_unix_date(void *date_ptr)
- +{
- + uint32 dos_date=0;
- + struct tm t;
- + time_t ret;
- +
- + dos_date = IVAL(date_ptr,0);
- +
- + if (dos_date == 0) return(0);
- +
- + interpret_dos_date(dos_date,&t.tm_year,&t.tm_mon,
- + &t.tm_mday,&t.tm_hour,&t.tm_min,&t.tm_sec);
- + t.tm_isdst = -1;
- +
- + /* mktime() also does the local to GMT time conversion for us */
- + ret = mktime(&t);
- +
- + return(ret);
- +}
- +
- +/*******************************************************************
- +like make_unix_date() but the words are reversed
- +********************************************************************/
- +time_t make_unix_date2(void *date_ptr)
- +{
- + uint32 x,x2;
- +
- + x = IVAL(date_ptr,0);
- + x2 = ((x&0xFFFF)<<16) | ((x&0xFFFF0000)>>16);
- + SIVAL(&x,0,x2);
- +
- + return(make_unix_date((void *)&x));
- +}
- +
- +/*******************************************************************
- + create a unix GMT date from a dos date in 32 bit "unix like" format
- + these generally arrive as localtimes, with corresponding DST
- + ******************************************************************/
- +time_t make_unix_date3(void *date_ptr)
- +{
- + time_t t = IVAL(date_ptr,0);
- + if (!null_mtime(t))
- + t += LocTimeDiff(t);
- + return(t);
- +}
- +
- +/****************************************************************************
- +set the time on a file
- +****************************************************************************/
- +BOOL set_filetime(char *fname,time_t mtime)
- +{
- + struct utimbuf times;
- +
- + if (null_mtime(mtime)) return(True);
- +
- + times.modtime = times.actime = mtime;
- +
- + if (sys_utime(fname,×)) {
- + DEBUG(4,("set_filetime(%s) failed: %s\n",fname,strerror(errno)));
- + }
- +
- + return(True);
- +}
- +
- +
- +/****************************************************************************
- + return the date and time as a string
- +****************************************************************************/
- +char *timestring(void )
- +{
- + static char TimeBuf[100];
- + time_t t = time(NULL);
- + struct tm *tm = LocalTime(&t);
- +
- +#ifdef NO_STRFTIME
- + strcpy(TimeBuf, asctime(tm));
- +#elif defined(CLIX) || defined(CONVEX)
- + strftime(TimeBuf,100,"%m/%d/%y %I:%M:%S %p",tm);
- +#elif defined(AMPM)
- + strftime(TimeBuf,100,"%D %r",tm);
- +#elif defined(TZ_TIME)
- + {
- + int zone = TimeDiff(t);
- + int absZoneMinutes = (zone<0 ? -zone : zone) / 60;
- + size_t len = strftime(TimeBuf,sizeof(TimeBuf)-6,"%D %T",tm);
- + sprintf(TimeBuf+len," %c%02d%02d",
- + zone<0?'+':'-',absZoneMinutes/60,absZoneMinutes%60);
- + }
- +#else
- + strftime(TimeBuf,100,"%D %T",tm);
- +#endif
- + return(TimeBuf);
- +}
- +
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/util.c samba-1.9.16alpha4/source/util.c
- --- samba-1.9.16alpha3/source/util.c Wed May 29 17:54:27 1996
- +++ samba-1.9.16alpha4/source/util.c Sat Jun 1 01:15:13 1996
- @@ -30,8 +30,6 @@
-
- int Protocol = PROTOCOL_COREPLUS;
-
- -int serverzone=0;
- -
- /* a default finfo structure to ensure all fields are sensible */
- file_info def_finfo = {-1,0,0,0,0,0,0,""};
-
- @@ -407,141 +405,6 @@
- close(fd);
- }
-
- -/*******************************************************************
- -a gettimeofday wrapper
- -********************************************************************/
- -void GetTimeOfDay(struct timeval *tval)
- -{
- -#ifdef GETTIMEOFDAY1
- - gettimeofday(tval);
- -#else
- - gettimeofday(tval,NULL);
- -#endif
- -}
- -
- -int extra_time_offset = 0;
- -
- -static int timediff = 0;
- -
- -/*******************************************************************
- -init the time differences
- -********************************************************************/
- -void TimeInit(void)
- -{
- - struct tm tm_utc,tm_local;
- - time_t t;
- -
- - t = time(NULL);
- -
- - tm_utc = *(gmtime(&t));
- - tm_local = *(localtime(&t));
- -
- -#ifdef HAVE_GMTOFF
- - timediff = -tm_local.tm_gmtoff;
- -#else
- - timediff = mktime(&tm_utc) - mktime(&tm_local);
- -#endif
- -
- - if (serverzone == 0) {
- - serverzone = timediff - DSTDiff(t);
- - DEBUG(4,("Serverzone is %d\n",serverzone));
- - }
- -}
- -
- -
- -/*******************************************************************
- -return the DST offset for a particular time
- -We keep a table of DST offsets to prevent calling localtime() on each
- -call of this function. This saves a LOT of time on many unixes.
- -********************************************************************/
- -int DSTDiff(time_t t)
- -{
- - static struct dst_table {time_t start,end; BOOL is_dst;} *dst_table = NULL;
- - static int table_size = 0;
- - int i;
- - BOOL is_dst = False;
- -
- - if (t == 0) t = time(NULL);
- -
- -#ifndef NO_ISDST
- - for (i=0;i<table_size;i++)
- - if (t >= dst_table[i].start && t <= dst_table[i].end) break;
- -
- - if (i<table_size) {
- - is_dst = dst_table[i].is_dst;
- - } else {
- - time_t low,high;
- -
- - dst_table = (struct dst_table *)Realloc(dst_table,
- - sizeof(dst_table[0])*(i+1));
- - if (!dst_table) {
- - table_size = 0;
- - return(0);
- - }
- -
- - table_size++;
- -
- - dst_table[i].is_dst = is_dst = (localtime(&t)->tm_isdst?True:False);
- - dst_table[i].start = dst_table[i].end = t;
- -
- - /* no entry will cover more than 6 months */
- - low = t - 3*30*24*60*60;
- -
- - /* widen the new entry using two bisection searches */
- - while (low+60*60 < dst_table[i].start) {
- - t = low + (dst_table[i].start-low)/2;
- - if ((localtime(&t)->tm_isdst?True:False) == is_dst)
- - dst_table[i].start = t;
- - else
- - low = t;
- - }
- -
- - high = low + 3*30*24*60*60;
- - while (high-60*60 > dst_table[i].end) {
- - t = high - (high-dst_table[i].end)/2;
- - if ((localtime(&t)->tm_isdst?True:False) == is_dst)
- - dst_table[i].end = t;
- - else
- - high = t;
- - }
- -
- -/*
- - DEBUG(1,("Added DST entry from %s ",
- - asctime(localtime(&dst_table[i].start))));
- - DEBUG(1,("to %s (%d)\n",asctime(localtime(&dst_table[i].end)),
- - dst_table[i].is_dst));
- -*/
- - }
- -#endif
- -
- - return((is_dst?60*60:0) - (extra_time_offset*60));
- -}
- -
- -/****************************************************************************
- -return the difference between local and GMT time
- -****************************************************************************/
- -int TimeDiff(time_t t)
- -{
- - static BOOL initialised = False;
- - if (!initialised) {initialised=True; TimeInit();}
- - return(timediff - DSTDiff(t));
- -}
- -
- -/****************************************************************************
- -try to optimise the localtime call, it can be quite expenive on some machines
- -timemul is normally LOCAL_TO_GMT, GMT_TO_LOCAL or 0
- -****************************************************************************/
- -struct tm *LocalTime(time_t *t,int timemul)
- -{
- - time_t t2 = *t;
- -
- - if (timemul)
- - t2 += timemul * TimeDiff(t2);
- -
- - return(gmtime(&t2));
- -}
- -
- -
- /****************************************************************************
- determine if a file descriptor is in fact a socket
- ****************************************************************************/
- @@ -822,32 +685,6 @@
- }
-
- /****************************************************************************
- - return the date and time as a string
- -****************************************************************************/
- -char *timestring(void )
- -{
- - static char TimeBuf[100];
- - time_t t;
- - t = time(NULL);
- -#ifdef NO_STRFTIME
- - strcpy(TimeBuf, asctime(LocalTime(&t,GMT_TO_LOCAL)));
- -#elif defined(CLIX) || defined(CONVEX)
- - strftime(TimeBuf,100,"%m/%d/%y %I:%M:%S %p",LocalTime(&t,GMT_TO_LOCAL));
- -#elif defined(AMPM)
- - strftime(TimeBuf,100,"%D %r",LocalTime(&t,GMT_TO_LOCAL));
- -#elif defined(TZ_TIME)
- - {
- - strftime(TimeBuf,100,"%D:%T",LocalTime(&t,0));
- - sprintf(TimeBuf+strlen(TimeBuf)," %+03d%02d",
- - -TimeDiff(t)/(60*60),-(TimeDiff(t)/60)%60);
- - }
- -#else
- - strftime(TimeBuf,100,"%D %T",LocalTime(&t,GMT_TO_LOCAL));
- -#endif
- - return(TimeBuf);
- -}
- -
- -/****************************************************************************
- determine whether we are in the specified group
- ****************************************************************************/
- BOOL in_group(gid_t group, int current_gid, int ngroups, int *groups)
- @@ -1050,159 +887,6 @@
- return(buf.st_size);
- }
-
- -/****************************************************************************
- -check if it's a null mtime
- -****************************************************************************/
- -static BOOL null_mtime(time_t mtime)
- -{
- - if (mtime == 0 || mtime == 0xFFFFFFFF)
- - return(True);
- - return(False);
- -}
- -
- -/*******************************************************************
- - create a 16 bit dos packed date
- -********************************************************************/
- -static uint16 make_dos_date1(time_t unixdate,struct tm *t)
- -{
- - uint16 ret=0;
- - ret = (((unsigned)(t->tm_mon+1)) >> 3) | ((t->tm_year-80) << 1);
- - ret = ((ret&0xFF)<<8) | (t->tm_mday | (((t->tm_mon+1) & 0x7) << 5));
- - return(ret);
- -}
- -
- -/*******************************************************************
- - create a 16 bit dos packed time
- -********************************************************************/
- -static uint16 make_dos_time1(time_t unixdate,struct tm *t)
- -{
- - uint16 ret=0;
- - ret = ((((unsigned)t->tm_min >> 3)&0x7) | (((unsigned)t->tm_hour) << 3));
- - ret = ((ret&0xFF)<<8) | ((t->tm_sec/2) | ((t->tm_min & 0x7) << 5));
- - return(ret);
- -}
- -
- -/*******************************************************************
- - create a 32 bit dos packed date/time from some parameters
- - This takes a GMT time and returns a packed localtime structure
- -********************************************************************/
- -static uint32 make_dos_date(time_t unixdate)
- -{
- - struct tm *t;
- - uint32 ret=0;
- -
- - t = LocalTime(&unixdate,GMT_TO_LOCAL);
- -
- - ret = make_dos_date1(unixdate,t);
- - ret = ((ret&0xFFFF)<<16) | make_dos_time1(unixdate,t);
- -
- - return(ret);
- -}
- -
- -/*******************************************************************
- -put a dos date into a buffer (time/date format)
- -This takes GMT time and puts local time in the buffer
- -********************************************************************/
- -void put_dos_date(char *buf,int offset,time_t unixdate)
- -{
- - uint32 x = make_dos_date(unixdate);
- - SIVAL(buf,offset,x);
- -}
- -
- -/*******************************************************************
- -put a dos date into a buffer (date/time format)
- -This takes GMT time and puts local time in the buffer
- -********************************************************************/
- -void put_dos_date2(char *buf,int offset,time_t unixdate)
- -{
- - uint32 x = make_dos_date(unixdate);
- - x = ((x&0xFFFF)<<16) | ((x&0xFFFF0000)>>16);
- - SIVAL(buf,offset,x);
- -}
- -
- -/*******************************************************************
- -put a dos 32 bit "unix like" date into a buffer. This routine takes
- -GMT and converts it to LOCAL time before putting it (most SMBs assume
- -localtime for this sort of date)
- -********************************************************************/
- -void put_dos_date3(char *buf,int offset,time_t unixdate)
- -{
- - if (!null_mtime(unixdate))
- - unixdate += GMT_TO_LOCAL*TimeDiff(unixdate);
- - SIVAL(buf,offset,unixdate);
- -}
- -
- -/*******************************************************************
- - interpret a 32 bit dos packed date/time to some parameters
- -********************************************************************/
- -static void interpret_dos_date(uint32 date,int *year,int *month,int *day,int *hour,int *minute,int *second)
- -{
- - uint32 p0,p1,p2,p3;
- -
- - p0=date&0xFF; p1=((date&0xFF00)>>8)&0xFF;
- - p2=((date&0xFF0000)>>16)&0xFF; p3=((date&0xFF000000)>>24)&0xFF;
- -
- - *second = 2*(p0 & 0x1F);
- - *minute = ((p0>>5)&0xFF) + ((p1&0x7)<<3);
- - *hour = (p1>>3)&0xFF;
- - *day = (p2&0x1F);
- - *month = ((p2>>5)&0xFF) + ((p3&0x1)<<3) - 1;
- - *year = ((p3>>1)&0xFF) + 80;
- -}
- -
- -/*******************************************************************
- - create a unix date (int GMT) from a dos date (which is actually in
- - localtime)
- -********************************************************************/
- -time_t make_unix_date(void *date_ptr)
- -{
- - uint32 dos_date=0;
- - struct tm t;
- - time_t ret;
- -
- - dos_date = IVAL(date_ptr,0);
- -
- - if (dos_date == 0) return(0);
- -
- - interpret_dos_date(dos_date,&t.tm_year,&t.tm_mon,
- - &t.tm_mday,&t.tm_hour,&t.tm_min,&t.tm_sec);
- - t.tm_wday = 1;
- - t.tm_yday = 1;
- - t.tm_isdst = -1;
- -
- - /* mktime() also does the local to GMT time conversion for us. XXXXX
- - Do all unixes do this the same?? */
- - ret = mktime(&t);
- -
- - return(ret);
- -}
- -
- -/*******************************************************************
- -like make_unix_date() but the words are reversed
- -********************************************************************/
- -time_t make_unix_date2(void *date_ptr)
- -{
- - uint32 x,x2;
- -
- - x = IVAL(date_ptr,0);
- - x2 = ((x&0xFFFF)<<16) | ((x&0xFFFF0000)>>16);
- - SIVAL(&x,0,x2);
- -
- - return(make_unix_date((void *)&x));
- -}
- -
- -/*******************************************************************
- - create a unix GMT date from a dos date in 32 bit "unix like" format
- -these generally arrive as localtimes, with corresponding DST
- -********************************************************************/
- -time_t make_unix_date3(void *date_ptr)
- -{
- - time_t t = IVAL(date_ptr,0);
- - if (!null_mtime(t))
- - t += LOCAL_TO_GMT*TimeDiff(t);
- - return(t);
- -}
- -
- /*******************************************************************
- return a string representing an attribute for a file
- ********************************************************************/
- @@ -3528,6 +3212,13 @@
- void *Realloc(void *p,int size)
- {
- void *ret=NULL;
- +
- + if (size == 0) {
- + if (p) free(p);
- + DEBUG(5,("Realloc asked for 0 bytes\n"));
- + return NULL;
- + }
- +
- if (!p)
- ret = (void *)malloc(size);
- else
- @@ -3539,25 +3230,6 @@
- return(ret);
- }
-
- -/****************************************************************************
- -set the time on a file
- -****************************************************************************/
- -BOOL set_filetime(char *fname,time_t mtime)
- -{
- - struct utimbuf times;
- -
- - if (null_mtime(mtime)) return(True);
- -
- - times.modtime = times.actime = mtime;
- -
- - if (sys_utime(fname,×)) {
- - DEBUG(4,("set_filetime(%s) failed: %s\n",fname,strerror(errno)));
- - }
- -
- - return(True);
- -}
- -
- -
- #ifdef NOSTRDUP
- /****************************************************************************
- duplicate a string
- @@ -3598,57 +3270,6 @@
- #endif
-
-
- -/****************************************************************************
- -return a time at the start of the current month
- -****************************************************************************/
- -time_t start_of_month(void)
- -{
- - time_t t = time(NULL);
- - struct tm *t2;
- -
- - t2 = gmtime(&t);
- -
- - t2->tm_mday = 1;
- - t2->tm_hour = 0;
- - t2->tm_min = 0;
- - t2->tm_sec = 0;
- -
- - return(mktime(t2));
- -}
- -
- -
- -/*******************************************************************
- - check for a sane unix date
- -********************************************************************/
- -BOOL sane_unix_date(time_t unixdate)
- -{
- - struct tm t,today;
- - time_t t_today = time(NULL);
- -
- - t = *(LocalTime(&unixdate,LOCAL_TO_GMT));
- - today = *(LocalTime(&t_today,LOCAL_TO_GMT));
- -
- - if (t.tm_year < 80)
- - return(False);
- -
- - if (t.tm_year > today.tm_year)
- - return(False);
- -
- - if (t.tm_year == today.tm_year &&
- - t.tm_mon > today.tm_mon)
- - return(False);
- -
- -
- - if (t.tm_year == today.tm_year &&
- - t.tm_mon == today.tm_mon &&
- - t.tm_mday > (today.tm_mday+1))
- - return(False);
- -
- - return(True);
- -}
- -
- -
- -
- #ifdef NO_FTRUNCATE
- /*******************************************************************
- ftruncate for operating systems that don't have it
- @@ -3730,11 +3351,7 @@
- int res;
-
- /* get my host name */
- -#ifdef MAXHOSTNAMELEN
- if (gethostname(host_name, MAXHOSTNAMELEN) == -1)
- -#else
- - if (gethostname(host_name, sizeof(host_name)) == -1)
- -#endif
- { DEBUG(0,("gethostname failed\n")); return -1; }
-
- /* get host info */
- @@ -3907,76 +3524,6 @@
- unsigned long a;
- putip((char *)&a,(char *)&ip);
- return(a == 0);
- -}
- -
- -#define TIME_FIXUP_CONSTANT (369.0*365.25*24*60*60-(3.0*24*60*60+6.0*60*60))
- -
- -/****************************************************************************
- -interpret an 8 byte "filetime" structure to a time_t
- -It's originally in "100ns units since jan 1st 1601"
- -
- -It appears to be kludge-GMT (at least for file listings). This means
- -its the GMT you get by taking a localtime and adding the
- -serverzone. This is NOT the same as GMT in some cases. This routine
- -converts this to real GMT.
- -****************************************************************************/
- -time_t interpret_long_date(char *p)
- -{
- - double d;
- - time_t ret;
- - uint32 tlow,thigh;
- - tlow = IVAL(p,0);
- - thigh = IVAL(p,4);
- -
- - if (thigh == 0) return(0);
- -
- - d = ((double)thigh)*4.0*(double)(1<<30);
- - d += (tlow&0xFFF00000);
- - d *= 1.0e-7;
- -
- - /* now adjust by 369 years to make the secs since 1970 */
- - d -= TIME_FIXUP_CONSTANT;
- -
- - if (d>=MAXINT)
- - return(0);
- -
- - ret = (time_t)(d+0.5);
- -
- - /* this takes us from kludge-GMT to real GMT */
- - ret += TimeDiff(ret) - serverzone;
- -
- - return(ret);
- -}
- -
- -
- -/****************************************************************************
- -put a 8 byte filetime from a time_t
- -This takes real GMT as input and converts to kludge-GMT
- -****************************************************************************/
- -void put_long_date(char *p,time_t t)
- -{
- - uint32 tlow,thigh;
- - double d;
- -
- - if (t==0) {
- - SIVAL(p,0,0); SIVAL(p,4,0);
- - return;
- - }
- -
- - /* this converts GMT to kludge-GMT */
- - t -= TimeDiff(t) - serverzone;
- -
- - d = (double) (t);
- -
- - d += TIME_FIXUP_CONSTANT;
- -
- - d *= 1.0e7;
- -
- - thigh = (uint32)(d * (1.0/(4.0*(double)(1<<30))));
- - tlow = (uint32)(d - ((double)thigh)*4.0*(double)(1<<30));
- -
- - SIVAL(p,0,tlow);
- - SIVAL(p,4,thigh);
- }
-
- /*******************************************************************
- diff -u -r --new-file --exclude=CVS samba-1.9.16alpha3/source/version.h samba-1.9.16alpha4/source/version.h
- --- samba-1.9.16alpha3/source/version.h Wed May 29 17:54:53 1996
- +++ samba-1.9.16alpha4/source/version.h Sat Jun 1 01:15:58 1996
- @@ -1 +1 @@
- -#define VERSION "1.9.16alpha3"
- +#define VERSION "1.9.16alpha4"
-